/*
    1.提供获取指定日志器的全局接口(避免用户自己操作单例对象)
    2.使用宏函数对日志器的接口进行代理(代理模式)
    3.提供宏函数, 直接通过默认日志器进行日志的标准输出打印(对于不想获取日志器的用户)
*/

#ifndef __L_LOG_H__
#define __L_LOG_H__

#include "logger.hpp"


namespace Log
{
    //1.提供获取指定日志器的全局接口(避免用户自己操作单例对象)
    Logger::ptr getLogger (const std::string& name)
    {
        return LoggerManager::getInstance().getLogger(name);
    }
    Logger::ptr rootLogger()
    {
        return LoggerManager::getInstance().rootLogger();
    }

    // 2.使用宏函数对日志器的接口进行代理(代理模式)
    #define DEBUG(fmt, ...) debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define INFO(fmt, ...)  info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define WARNNING(fmt, ...) warnning(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define ERROR(fmt, ...) error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define FATAL(fmt, ...) fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)

    // 3.提供宏函数, 直接通过默认日志器进行日志的标准输出打印(对于不想获取日志器的用户)
    #define LOGDEBUG(fmt, ...)      Log::rootLogger()->DEBUG(fmt, ##__VA_ARGS__)
    #define LOGINFO(fmt, ...)       Log::rootLogger()->INFO(fmt, ##__VA_ARGS__)
    #define LOGWARNNING(fmt, ...)   Log::rootLogger()->WARNNING(fmt, ##__VA_ARGS__)
    #define LOGERROR(fmt, ...)      Log::rootLogger()->ERROR(fmt, ##__VA_ARGS__)
    #define LOGFATAL(fmt, ...)      Log::rootLogger()->FATAL(fmt, ##__VA_ARGS__)

}
#endif